package com.qf.controller;

import com.qf.entity.User;
import org.springframework.format.annotation.DateTimeFormat;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.regex.Pattern;

/**
 * --- 就那样---
 *
 * @author zzw
 * @date 2025/8/16
 * @desc  接收数据演示
 */
@Controller
public class Demo2Controller {
    @GetMapping("/base")
    //现在要拿到前端数据只需要在方法里添加参数和前端数据一致即可
    //注意直接填日期类型会报错400，因为这个框架只支持2025/08/04,接收到的是2025-08-04，
    //所以需要在日期参数前面加日期解析的注解
    //不过设计这个参数只要设计了就必须传参
    public String show3(@DateTimeFormat(pattern = "yyyy-mm-dd") Date birthday, int id, String username, double score, int sex){
        System.out.println("接收数据");
        System.out.println("id = " + id);
        System.out.println("username = " + username);
        System.out.println("score = " + score);
        System.out.println("birthday = " + birthday);
        return "ok.html";
    }

    /**
     * 前端发送的数据较多，可以使用对象直接接收
     * 前提是前端name要和对象的属性名一致
     */

    @GetMapping("/base2")
    public String show4(User user){
        System.out.println("user = " + user);
        return "ok.html";

    }


    /**
     *演示接收前端使用工具aixos发送的post，且是json格式
     */
    /**
     *前端发json 对象收不到，要加个注解
     * 这时候会报错405 响应问题，响应也要json，接收json也要响应json
     * ResponseBody这个注解可以把响应变json
     * RequestBody 这个注解可以把请求的对象变json
     */


    /**
     * 前端如果给后端发json数据，后端使用对象接收前要加RequestBody注解
     *
     */
    @PostMapping ("/obj2")
    @ResponseBody//这个注解可以把响应返回值变json
    public String show5(@RequestBody User user){
        System.out.println("user = " + user);
        return "{\"code\":200}";

    }

    /**
     *使用数组来接收数据（场景主要用于批量删除）
     * 前端是复选框后端我们用数组接收
     */

    @GetMapping ("/array")
    public String show6( int [] ids){
        System.out.println("ids = " + Arrays.toString(ids));
        return "ok.html";
    }

    /**
     *使用集合接收数据
     * springMVC框架不支持直接封装list 需要加注解RequestParam
     */
    @GetMapping ("/arraylist")
    public String show7(@RequestParam ArrayList <Integer> ids){
        System.out.println("ids = " + ids);
        return "ok.html";
    }

    /**
     *使用map集合接收数据（凡是可以用对象接收的都可以用map）
     *注意也需要注解
     */
    @GetMapping ("/receiveMap")
    public String show8(@RequestParam HashMap<String,Object> map){
        System.out.println("map = " + map);
        return "ok.html";
    }

    /**
     *路径参数（数据在路径里面）
     * 需要给url中变量部分改成{变量}，方法参数和变量名一致
     * 这里使用的是PathVariable 注解 取路径中的数据
     * 此时点击访问会报500，因为这种路径参数会使用@PathVariable 注解 默认需要返回json，返回页面解析不了
     *
     */
    @GetMapping("/blog/{userid}/article/details/{homeid}")
    @ResponseBody
    public  String show9(@PathVariable String userid, @PathVariable String homeid){
        System.out.println("userid = " + userid);
        System.out.println("homeid = " + homeid);
        return "\"code\":200";
    }



}